async-recursion macro
Procedural macro for recursive async functions.
- Documentation
- Cargo package: async-recursion
Motivation
Consider the following recursive implementation of the fibonacci numbers:
async
The compiler helpfully tells us that:
error[E0733]: recursion in an `async fn` requires boxing
--> src/main.rs:1:26
|
1 | async fn fib(n : u32) -> u64 {
| ^^^ recursive `async fn`
|
= note: a recursive `async fn` must be rewritten to return a boxed `dyn Future`.
This crate provides an attribute macro to automatically convert an async function to one returning a boxed Future.
Example
use async_recursion;
async
?Send Option
By default the returned future has a Send
bound to make sure that it can be sent between threads. If this is not desired you can mark that you would like that that bound to be left out like so:
async
In other words, #[async_recursion]
modifies your function to return a BoxFuture
and #[async_recursion(?Send)]
modifies your function to return a LocalBoxFuture
.
Installation
Add this to your Cargo.toml
:
[]
= "0.2"
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.